package config

import (
	"encoding/json"
	"fmt"
	"github.com/dgrijalva/jwt-go"
	"os"
)

type SSHGlobalKeys struct {
	PrivateKeyPath string `json:"private_key_path"`
	PublicKeyPath  string `json:"public_key_path"`
	PrivateKey     string `json:"private_key"`
	PublicKey      string `json:"public_key"`
}

type LogConfig struct {
	Level      string `json:"level"`
	Filename   string `json:"filename"`
	MaxSize    int    `json:"maxSize"`
	MaxAge     int    `json:"max_age"`
	MaxBackups int    `json:"max_backups"`
}

type DatabaseConfig struct {
	Driver          string `json:"driver"`
	Host            string `json:"host"`
	Port            string `json:"port"`
	Database        string `json:"database"`
	Username        string `json:"username"`
	Password        string `json:"password"`
	Charset         string `json:"charset"`
	MaximumConn     int    `json:"maximum_connection"`
	MaximumFreeConn int    `json:"maximum_free_connection"`
	TimeOut         int    `json:"timeout"`
}

type EmailConfig struct {
	Host string `json:"host"`
	Port string `json:"port"`
	// 发送人信息
	From string `json:"from"`
	User string `json:"user"`
	Pwd  string `json:"pwd"`
}

type Config struct {
	Mode                string `json:"mode"`
	Host                string `json:"host"`
	Port                int    `json:"port"`
	Env                 string `json:"env"`
	SecretKey           string `json:"secret_key"`
	*LogConfig          `json:"log"`
	*DatabaseConfig     `json:"database"`
	*jwt.StandardClaims `json:"jwt"`
	*SSHGlobalKeys      `json:"ssh_global_keys"`
	*EmailConfig        `json:"email"`
}

var Conf = new(Config)

func Init(filepath string) error {
	// filepath配置文件json的路径
	b, err := os.ReadFile(filepath)
	if err != nil {
		fmt.Println(err)
	}
	err = json.Unmarshal(b, Conf)

	publicKey, _ := os.ReadFile(Conf.SSHGlobalKeys.PublicKeyPath)

	privateKey, _ := os.ReadFile(Conf.SSHGlobalKeys.PrivateKeyPath)

	Conf.SSHGlobalKeys.PublicKey = string(publicKey)
	Conf.SSHGlobalKeys.PrivateKey = string(privateKey)
	return err
}
